"""
SqlAlchermy group_by和having子句
1. group_by：根据某个字段进行分组。比如想要根据性别进行分组，来统计每个分组分别有多少人
2. having：是对查找结果进一步过滤
"""
import os
import sys

path = os.path.dirname(__file__)
sys.path.append(os.path.join(path, '..'))
from sqlalchemy import func
from orm.demo3 import CompanyStaff, PositionEnum
from conf.mysql_config import SESSION


def search_data():
    # 1. group_by：根据某个字段进行分组。比如想要根据性别进行分组，来统计每个分组分别有多少人
    results = SESSION.query(CompanyStaff.position, func.count(CompanyStaff.id)). \
        group_by(CompanyStaff.position).order_by(func.count(CompanyStaff.id).desc()).all()
    print(results)
    # 2. having：是对查找结果进一步过滤，例：只查询前端、后端、全栈数据
    results = SESSION.query(CompanyStaff.position, func.count(CompanyStaff.id)).group_by(CompanyStaff.position). \
        order_by(func.count(CompanyStaff.id).desc()). \
        having(CompanyStaff.position.in_([PositionEnum.back_end.name, PositionEnum.front_end.name,
                                          PositionEnum.whole_stack.name])).all()
    print(results)


if __name__ == '__main__':
    search_data()
